package com.qf.hospital.controller;

import com.github.pagehelper.PageInfo;
import com.qf.hospital.entity.SysRole;
import com.qf.hospital.enums.HospitalExceptionEnums;
import com.qf.hospital.service.SysRoleService;
import com.qf.hospital.vo.R;
import com.qf.hospital.vo.LayUIDTreeVO;
import com.qf.hospital.vo.SysRoleVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * @author zjw
 * @description 角色管理的Controller
 * @date 2021/10/18 16:47
 */
@RestController
public class RoleController {

    private Logger log = LoggerFactory.getLogger(RoleController.class);

    @Autowired
    private SysRoleService sysRoleService;


    /**
     * 展示角色信息
     * @param rolename  角色名称
     * @param roledesc  角色描述
     * @param available  是否可用
     * @param page  。。
     * @param limit 。。
     * @return
     */
    @GetMapping("/role/loadAllRole")
    public R loadAllRole(String rolename, String roledesc, Integer available,
                         @RequestParam(defaultValue = "1")Integer page,
                         @RequestParam(defaultValue = "10")Integer limit){
        //1. 调用service根据条件查询角色信息
        PageInfo<SysRole> pageInfo =  sysRoleService.loadAllRole(rolename,roledesc,available,page,limit);

        //2. 封装数据
        long count = pageInfo.getTotal();
        List<SysRoleVO> data = new ArrayList<>();
        for (SysRole sysRole : pageInfo.getList()) {
            SysRoleVO vo = new SysRoleVO();
            BeanUtils.copyProperties(sysRole,vo);
            data.add(vo);
        }

        //3. 返回
        return R.ok(count,data);
    }


    /**
     * 展示全部菜单信息&回显角色拥有的信息
     * @param roleid
     * @return
     */
    @PostMapping("/role/initRoleMenuTreeJson")
    public R initRoleMenuTreeJSON(Integer roleid){
        //1. 校验参数
        if(roleid == null){
            log.info("【分配角色菜单】 请求参数不合法！");
            return R.error(HospitalExceptionEnums.REQUEST_PARAMETER_ERROR);
        }

        //2. 调用Service查询全部菜单信息，并且回显角色拥有菜单
        List<LayUIDTreeVO> data = sysRoleService.initRoleMenuTreeJSON(roleid);

        //3. 响应数据
        return R.ok(data);
    }


    /**
     * 分配角色的菜单
     * @param roleid
     * @param ids
     * @return
     */
    @PostMapping("/role/saveRoleMenu")
    public R saveRoleMenu(Integer roleid,Integer[] ids){
        //1. 校验参数
        if(roleid == null){
            log.info("【分配角色菜单】 请求参数不合法！");
            return R.error(HospitalExceptionEnums.REQUEST_PARAMETER_ERROR);
        }

        //2. 调用service完成菜单信息的分配
        sysRoleService.saveRoleMenu(roleid,ids);

        //3. 返回
        return R.ok("分配角色菜单成功！");
    }

}
